class SomeClass
{
    public:
        virtual int public_m()
        {
            return 1;
        }


        static boost::shared_ptr<SomeClass> factory()
        {
            return boost::shared_ptr<SomeClass>(new SomeClass);
        }
    protected:
        virtual int protected_m()
        {
            return 2;
        }

        int protected_v;
};
